Traditional vector graphics techniques specify relatively simple and limited color functions to independently fill closed shapes. More recent approaches include somewhat more sophisticated interpolation tools, such as gradient meshes and diffusion curves. While these tools allow for more complex color gradients in images, they nevertheless suffer from shortcomings. For example, creating and manipulating gradient meshes, which interpolate over a lattice of color values at each vertex across a uniform grid or mesh, can be extremely tedious since individual colors typically need to be specified at numerous mesh vertices.
Diffusion curves, in turn, allow a user to create image features over a more flexible network of curves rather than over a mesh lattice. Each diffusion curve constrains the image along that curve, with a separately-controllable color value on each of its two sides. Color along the curve is typically specified as two color values (one for each side) at each curve control point. These colors are then diffused away from the set of diffusion curves to the rest of the image by using an interpolating function based on solving Laplace's equation. However, Laplacian diffusion yields derivative discontinuities at constraints. A diffusion curve forms a “crease” even if the same color value is specified on both its sides. A color constraint at an isolated point (rather than a curve) yields an objectionable “tent-like” interpolation result.
In addition to the unnatural appearance and the need to specify sets of colors along each curve, there are other drawbacks associated with diffusion curves as well. For example, a user is typically limited to a single type of primitive, namely the diffusion curve feature, for editing the image. Furthermore, Laplacian diffusion does not extrapolate away from constraints. Smoothly filling an irregular region requires specifying colors along the region's entire boundary and can't be controlled using a sparse set of points within the region.